＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

                        PC-FXGAオーサリングソフトウェア
                    『ＧＭＡＫＥＲ』スタータキット(Ver.1.0)
                        ＡＩＤファイルフォーマットの解説

                                        日本電気ホームエレクトロニクス株式会社
                                                        １９９５年１１月１０日

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

目次

第１章  AID ファイル概要

第２章  AID ファイルフォーマット

２．１  ファイルヘッダ (File Header)
２．１．１    acfilehdr_t 構造体
２．１．２    imagehdr_t 構造体
２．２  イメージテーブル
２．２．１    imagetbl_t 構造体

第３章  AID ファイルのバイト整合
３．１  エンディアン
３．２  アライメント

第４章  データタイプ

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第１章  AID ファイル概要

AID ファイルは HuC6273 にて扱う二次元イメージデータを定義します。

AID ファイルはバイナリフォーマットにて提供されており、メモリに読み込み後簡単な
手続きにて FARL で取り扱うことが可能です。

このファイルでは AIDファイル構成の詳細な情報を提供します。

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第２章  AID ファイルフォーマット

AID ファイルは以下の ３種類の構造子からなります。

１）File Header         ファイルヘッダ(Model Headerを含む)
２）Image Table         イメージデータの集合を管理するデータの配置テーブル
３）Image Data Block    イメージデータ

以下の図は、代表的な AIDファイルの構造を示します。

                +------------------+
                |   File Header    |    64 bytes
                +------------------+
                |   Image table1   |    40 * n bytes
                +------------------+
                |   Image table2   |    40 * n bytes
                +------------------+
                |Image Data Block1 |    some bytes (64bit aligned)
                +------------------+
                |Image Data Block2 |    some bytes (64bit aligned)
                +------------------+
                |                  |
                         :

■２．１  ファイルヘッダ (File Header)

ファイルヘッダは AGDファイル、AIDファイル、ACDファイルの各データファイルに共通
なヘッダ情報と、それぞれのファイルに固有なデータを含む64bytes の構造体のバイナ
リイメージです。

共通のヘッダ情報はマジックコードやバージョン情報、コメント等で構成され、 AID固
有の情報はイメージデータの名前やデータタイプ等で構成されます。

構造体の定義を以下に示します。


◆２．１．１  acfilehdr_t 構造体

typedef struct { /* 64 bytes */
/* Aurora common file header structure member  <48 bytes> */
	CARD8	magic_code[4];		/*  0..3 */
	CARD8	version[4];		/*  4..7 */
	CARD8 	tool_name[16];		/*  8..23 */
	CARD8 	comment[16];		/* 24..39 */
	CARD32	file_size;		/* 40..43 */
	CARD32	reserved0;		/* 44..47 */
/* Aurora tools characteristic structure member <16 bytes> */
	CARD8	acparam[16];		/* 48..63 */
} acfilehdr_t;


magiccode     AIDファイルを示す識別子
              <参考> 現在はそれぞれ以下のように定められています。

         AGDファイル == "AGD\0"
         AIDファイル == "AID\0"
         ACDファイル == "ACD\0"

version       AID ファイルのフォーマット・バージョン
              4バイトの文字列で表し、バージョン情報は２桁10進の数字と１桁のアル
              ファベット、そして \0(NULL)で構成され、各桁はそれぞれリリース番号
              、バージョン、マイナー・バージョンを表し、現在は "20a\0"(2.0a)と
              なります。

tool_name     AIDファイルを作成したツールの名前を定義
              16バイトの文字列で表し、16バイト目には必ず \0(NULL)をおく必要があ
              り、このため tool_nameは最長15文字で構成されます。これに満たない
              場合は、残りを \0(NULL)で埋める必要があります。

comment       AIDファイルを作成した時に付けられたコメント
              16バイトの文字列で表し、で格納します。16バイト目には必ず \0(NULL)
              をおく必要があり、このため commentは最長15文字まで付けることがで
              きます。これに満たない場合は、残りを \0(NULL)で埋める必要がありま
              す。コメントがない場合は、16バイトすべてを \0(NULL)で埋めます。

file_size     ファイルに格納されているデータのサイズ（テーブル類も含む）
              ファイル全体のサイズからファイルヘッダのサイズを減じたものに一致
              します。

acparam        AGD/AID/ACDそれぞれ固有の情報が格納されます。

以上の 6つのメンバは AGD/AID/ACD共通です。


◆２．１．２  imagehdr_t 構造体

この構造体は、前述の acfilehdr_t構造体の acparam領域に格納され、acfilehdr_t 構
造体の一部分として存在します。この構造体は、ポインターのサイズが、使用ホストに
よって異なるため、ファイル上では fimagehdr_t として定義され、メモリ上では image
hdr_t として定義されます。

ファイル上の構造体
typedef struct { /* 16 bytes */
/* Aurora tools characteristic structure member <16 bytes> */
	CARD16	display_mode;		/* 48..49 */
	CARD16	colormap_type;		/* 50..51 */
	CARD16	colormap_id;		/* 52..53 */
	CARD16	imagetbl_cnt;		/* 54..55 */
	CARD32	imagetbl_addr;		/* 56..59 */
	CARD32	imagetbl_size;		/* 60..63 */
} fimagehdr_t;

実メモリ上での構造体
typedef struct { 
/* Aurora tools characteristic structure member */
	CARD16	display_mode;
	CARD16	colormap_type;
	CARD16	colormap_id;
	CARD16	imagetbl_cnt;
	void 	*imagetbl_addr;
	CARD32	imagetbl_size;
} imagehdr_t;


display_mode       ディスプレイモードの設定
                   この値の定義は、以下のようになります。

         AC_DISP_MODE_NRM         ノーマルモード
         AC_DISP_MODE_WDM         ワイドモード

colormap_type      カラーマップのタイプの設定
                   この値の定義は、以下のようになります。

         AC_CMAP_TYPE_INDEX9      9ビット・インデックスモード
         AC_CMAP_TYPE_INDEX12     12ビット・インデックスモード
         AC_CMAP_TYPE_I3C6        I=3bit,C=6bit・ICモード
         AC_CMAP_TYPE_I4C5        I=4bit,C=5bit・ICモード
         AC_CMAP_TYPE_I5C4        I=5bit,C=4bit・ICモード
         AC_CMAP_TYPE_I6C3        I=6bit,C=3bit・ICモード
         AC_CMAP_TYPE_I6C6        I=6bit,C=6bit・ICモード

colormap_id        カラーマップIDの設定
                   現在は、デフォルトのカラーマップのみしかサポートしていないた
                   め、IDは必ず 1となります。

         AC_DEFAULT_CMAP_ID       1

imagetbl_cnt      ヘッダーに直接リンクされているイメージテーブルの数
                  モデルテーブルは、階層構造を持っているため、ここに全てのモデ
                  ルテーブル数が入るわけではありません。直接リンクされるモデル
                  テーブルの数は最大 65535個になります。

imagetbl_addr     acfilehdr_t 構造体の直後からのバイト数
                  通常は、この imagehdr_t 構造体の直後を指します。ただし、メモ
                  リ上の構造体として、展開されている時は、実際のアドレスを格納
                  し、imagetbl_t 構造体を指すポインターとなります。

imagetbl_size     ヘッダーに直接リンクされているモデルテーブルのサイズ
                  sizeof(imagetbl_t) * imagetbl_cntに一致します。


■２．２  イメージテーブル

この構造体は、モデルデータを階層的に持つために階層構造のリンクを可能としていま
す。この構造体は、ポインターのサイズが、使用ホストによって異なるため、ファイル
上では fimagetbl_t として定義され、メモリ上では imagetbl_t として定義されます。


◆２．２．１  imagetbl_t 構造体

ファイル上の構造体

typedef struct { /* 40 bytes */
	CARD8	image_id;		/*  0..0  */
	CARD8	bank;			/*  1..1  */
	CARD8	image_format;		/*  2..2  */
	CARD8	reserved1[5];		/*  3..7  */
	CARD8	image_name[16];		/*  8..23  */
	CARD16	image_pos_x;		/* 24..25  */
	CARD16	image_pos_y;		/* 26..27  */
	CARD16	image_width;		/* 28..29  */
	CARD16	image_height;		/* 30..31  */
	CARD32	image_addr;		/* 32..35  */
	CARD32	image_size;		/* 36..39  */
} fimagetbl_t;

実メモリ上での構造体
typedef struct {
	CARD8	image_id;
	CARD8	bank;	
	CARD8	image_format;
	CARD8	reserved1[5];
	CARD8	image_name[16];	
	CARD16	image_pos_x;
	CARD16	image_pos_y;
	CARD16	image_width;
	CARD16	image_height;
	void	*image_addr;	
	CARD32	image_size;
} imagetbl_t;


image_id      イメージデータの管理ID番号
              特に設定の規定はありません。ただし、IDの最大値は、255です。

bank          イメージデータが格納されているテクスチャ・バッファのバンク番号
              イメージデータがテクスチャ・バッファを対象としているとき、そのデ
              ータが格納されるべき、バンク番号を指定します。（ATTファイルによ
              る操作が行なわれるときは、ATTファイルの内容が優先されます）

image_format  イメージデータのフォーマットを設定
              YUVやRGBなどのデータ形式や各ビットの定義などを指定します。
              テクスチャバッファに置かれるデータとして、

         AID_IMG_FORMAT_INDEX9    PACKモードの9ビットデータハーフワード幅の領域
                                  に9ビットのデータが格納されています。テクスチ
                                  ャ・バッファへのダイレクト・アクセスで書き込
                                  むのに向いた形式です。

         AID_IMG_FORMAT_INDEX12   PACKモードの12ビットデータ
                                  ハーフワード幅の領域に12ビットのデータが格納
                                  されています。I=6,C=6や12ビット・インデックス
                                  ・カラーの為の形式ですが、9ビットカラーのサポ
                                  ートしかないハードウェアではAID_IMG_UNPACK12
                                  と同じ扱いになります。

         AID_IMG_FORMAT_INDEX16   PACKモードの16ビットデータ
                                  ハーフワード幅の領域に16ビットのデータが格納
                                  されています。基本的にAID_IMG_FORMAT_INDEX12
                                  と同じですが、フレームバッファへの書き込み時
                                  に上位四ビットをオーバーレイや乱数に利用でき
                                  ます。

         AID_IMG_FORMAT_INDEX8    PACKモードの8ビットデータ
                                  バイト幅の領域に8ビットのデータが格納される形
                                  式ですが、現在は予約のみされておりまだサポー
                                  トされていません。

         AID_IMG_FORMAT_UNPACK12  UNPACKモードの12ビットデータ
                                  ハーフワード幅の領域に12ビットのデータが格納
                                  されています。put texture image コマンドで利
                                  用するのに向いた形式のデータです。

        AID_IMG_FORMAT_YUV888    Y,U,V各8ビットの24ビットデータ
                                 YUVカラーのデータの為に予約された形式ですが今
                                 はまだサポートされていません。

        AID_IMG_FORMAT_YUV844    Y,U,V各8,4,4ビットの16ビットデータ
                                 YUVカラーのデータの為に予約された形式ですが今
                                 はまだサポートされていません。

         AID_IMG_FORMAT_RGB888   R,G,B各8ビットの24ビットデータRGBカラーのデー
                                 タの為に予約された形式ですが今はまだサポートさ
                                 れていません。

         AID_IMG_FORMAT_RGB555    R,G,B各5ビットの15ビットデータ
                                  RGBカラーのデータの為に予約された形式ですが今
                                  はまだサポートされていません。

         が、定義されています。

	ディスプレイバッファ用（バックグラウンド）のデータの場合は、

	AID_BG_FORMAT_INDEX9		
	AID_BG_FORMAT_INDEX12		
	AID_BG_FORMAT_INDEX16		
	AID_BG_FORMAT_INDEX8		
	AID_BG_FORMAT_UNPACK12		（定義内容は同上）
	AID_BG_FORMAT_YUV888		
	AID_BG_FORMAT_YUV844		
	AID_BG_FORMAT_RGB888		
	AID_BG_FORMAT_RGB555

	として、定義されます。
	ツールは、全てのフォーマットをサポートしているわけではありませ
	んので、どのフォーマットを扱えるかは、各ツールのマニュアルを
	参照して下さい。


image_name    イメージデータに付けられた名前
              16バイトで文字列で表し、16バイト目には必ず \0(NULL)をおく必要があ
              り、このため image_nameは最長15文字まで付けることができます。これ
              に満たない場合は、残りを \0(NULL)で埋める必要があります。image_na
              meがない場合は、16バイトすべてを \0 (NULL)で埋めます。

image_pos_x   イメージデータの格納されるべき、バッファ内のXのアドレス位置

image_pos_y   イメージデータの格納されるべき、バッファ内のYのアドレス位置

image_width   イメージデータのラスター方向の大きさ（X方向のサイズ）

image_height  イメージデータの垂直方向の大きさ（Y方向のサイズ）

image_addr    イメージデータの開始アドレス
              acfilehdr_t 構造体の直後からのバイト数で表します。ただし、メモリ
              上の構造体として、展開されている時は、実際のアドレスを格納し、イ
              メージデータを指すポインターとなります。

image_size    イメージデータの大きさのバイト数

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第３章  AID ファイルのバイト整合

■３．１  エンディアン

AID ファイルはリトルインディアンのバイナリ形式で提供されます。
１つのデータの MSB (Most Significant Bit) は最上位バイト目に、LSB (Little Signi
ficant bit)は 0バイト目に現れます。

つまり、32bit のデータ（4byte のデータ）は

    MSB(31bit)                          LSB(0bit)
     +--------+--------+--------+--------+
     |7  ..  0|7  ..  0|7  ..  0|7  ..  0|
     +--------+--------+--------+--------+
          3        2        1        0 (byte)

といった順番に並び、 12345678(Hex)というデータはバイト順に78、56、34、12となり
ます。


■３．２  アライメント

ヘッダ、テーブル、データの開始位置は 64bit alignmentでなくてはなりません。

例えば、あるデータが 6バイト分のデータの場合、続くデータは2バイト分空けて開始し
なくてはいけません。

  悪い例：      addr. +0 +1 +2 +3 +4 +5 +6 +7
                0000  <-- 1st data ---> <----
                0008  --- 2nd data ------> <-
                0010  --- 3rd data ---> <----

  良い例：      addr. +0 +1 +2 +3 +4 +5 +6 +7
                0000  <-- 1st data ---> 00 00
                0008  <-- 2nd data ----------
                0010  -> 00 00 00 00 00 00 00
                0018  <-- 3rd data ------> 00

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第４章  データタイプ

AIDファイルで使われるデータタイプは、actype.hで規定されています。
データタイプの定義は以下のようになります。

         CARD8           8 bit 符号なし整数
         CARD16         16 bit 符号なし整数
         CARD32         32 bit 符号なし整数
         CARD64         64 bit 符号なし整数 (AIDでは使用しません）
         CARDF32        32 bit IEEE 実数形式 (AIDでは使用しません）

コンパイラの違いなどにより、それぞれの定義が異なりますので注意が必要です。

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

                                                           (C)1995 HUDSON SOFT
                                                           (C)1995 KUBOTA CORP.

